/**
 * @file EpollPoll.h
 * @author Lost
 * @date 五月 2018
 * @brief 
 * 基于epoll的轮询
 */

#ifndef __EPOLLPOLL_H__
#define __EPOLLPOLL_H__

#include "Poll.h"

#include <sys/epoll.h>
//#include <event.h>
/**
 * @brief 基于epoll的轮询
 */
class CEpollPoll : public CPoll
{
public:
    CEpollPoll();
    ~CEpollPoll();
public:
    /**
     * @brief 初始化
     */
    virtual bool Init(const int iReadySize);
    /**
     * @brief 添加套接字
     */
    virtual bool AddReadSocket(const int iSocket);

    /**
     * @brief 删除套接字
     */
    virtual void RemoveReadSocket(const int iSocket);

    /**
     * @brief 添加套接字
     */
    virtual bool AddWriteSocket(const int iSocket);

    /**
     * @brief 删除套接字
     */
    virtual void RemoveWriteSocket(const int iSocket);

    /**
     * @brief 检测网络事件
     */
    virtual int Polling(int iWaitTime);

    /**
     * @brief 获取名字
     */
    virtual const char *GetName();

private:
    /*!< epoll文件描述符 */
    int m_iEpFd;

    /*!< 触发事件 */
    struct epoll_event *m_pEvent;

    /*!< 已注册套接字数量 */
    int m_iSocketCount;

    /*!< 套接字总数量 */
    int m_iTotalCount;
};


#endif // __EPOLLPOLL_H__


